package com.bwie.home.common.utils;

import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Date;

/**
 * user:zyr
 * date:2021/7/17
 * time:19:04
 */
//      <dependency>
//            <groupId>com.aliyun.oss</groupId>
//            <artifactId>aliyun-sdk-oss</artifactId>
//            <version>3.1.0</version>
//        </dependency>

public class OosSave {

    public String   saveObject(String key,MultipartFile file){

        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "https://oss-cn-shanghai.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI5tQJhTSU5oqoVKjZTZnL";
        String accessKeySecret = "stzzdpP3zzAPdBdwHDDsxcaU7JnnzK";
        String bucketName = "smart2-0";
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 创建PutObjectRequest对象。
// 依次填写Bucket名称（例如examplebucket）、Object完整路径（例如exampledir/exampleobject.txt）和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
// 如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件。
        PutObjectRequest putObjectRequest=null;
        try {
            putObjectRequest = new PutObjectRequest("smart2-0", key, file.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
// 如果需要上传时设置存储类型和访问权限，请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);

        // 上传文件。
        PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);

        Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10 );
        GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, key, HttpMethod.GET);
        req.setExpiration(expiration);
        URL signedUrl = ossClient.generatePresignedUrl(req);
        String s = signedUrl.toString().split("/??Expires")[0];
        System.out.println(s);
        ossClient.shutdown();
        return s;
    }


    public Object getObject(String getName,String newName){
        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "https://oss-cn-shanghai.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI5tQJhTSU5oqoVKjZTZnL";
        String accessKeySecret = "stzzdpP3zzAPdBdwHDDsxcaU7JnnzK";

// 填写Bucket名称。
        String bucketName = "smart2-0";
// 填写不包含Bucket名称在内的Object完整路径，例如testfolder/exampleobject.txt。


// 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 下载Object到本地文件，并保存到指定的本地路径中。如果指定的本地文件存在会覆盖，不存在则新建。
// 如果未指定本地路径，则下载后的文件默认保存到示例程序所属项目对应本地路径中。
        ObjectMetadata object = ossClient.getObject(new GetObjectRequest(bucketName, getName), new File("D:\\RecvFile\\"+newName));
        System.out.println(object);


// 关闭OSSClient。
        ossClient.shutdown();
    return object;


    }





}
